// 更方便的数据访问--解构


// const people = {
// name: 'lux',
// age: 20
// }
// const { name, age } = people
// console.log(`${name} --- ${age}`)
// //数组
// const color = ['red', 'blue']
// const [first, second] = color
// console.log(first) //'red'
// console.log(second) //'blue'

// 解构
// let { name, age } = { name: 'jh', age: 24 };

// 设置新名字
// let { name: newName, age } = { name: 'jh', age: 24 };

// 设置默认值
// let { name: newName, age, job:work='teacher' } = { name: 'jh', age: 24 };

// 数组解构
// const [a1, a2] = [55,66];

// const arr = [3,4,6];
// const [a4,a5] = arr;
// const [a7,,a9] = arr;


// Spread Operator 展开运算符

// 组装对象或者数组 
//数组
// const color = ['red', 'yellow']
// const colorful = [...color, 'green', 'pink']
// console.log(colorful) //[red, yellow, green, pink]

//对象
// const alp = { fist: 'a', second: 'b'}
// const alphabets = { ...alp, third: 'c' }
// console.log(alphabets) //{ "fist": "a", "second": "b", "third": "c" }


// 数组使用 rest 接受参数
// const number = [1,2,3,4,5]
// const [first, ...rest] = number
// console.log(rest) //2,3,4,5

// 有时候我们想获取数组或者对象除了前几项或者除了某几项的其他项
//对象
// const user = {  username: 'lux', gender: 'female', age: 19, address: 'peking'}
// const { username, ...rest } = user
// console.log(rest) //{"address": "peking", "age": 19, "gender": "female" }


// 对于 Object 而言，还可以用于组合成新的 Object 。(ES2017 stage-2 proposal) 当然如果有重复的属性名，右边覆盖左边

// const first = {  a: 1, b: 2, c: 6  }
// const second = {  c: 3,    d: 4  }

// const total2 = { ...first, ...second }
// console.log(total2) // { a: 1, b: 2, c: 3, d: 4 }

// 数组的扩展运算符
    // console.log(...[1, 2, 3]) // 1 2 3
    // console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5

// 该运算符主要用于函数调用。

    // function push(array, ...items) {
    //     array.push(...items);
    // }
    
    // function add(x, y) {
    //     return x + y;
    // }
    
    // const numbers = [4, 38];
    // add(...numbers) // 42

// 数组扩展运算符与解构赋值结合
    // const list=[1,2,3,4,5];
    // const [a, ...rest] = list;
    // console.log(a, rest); // 1 [2,3,4,5];

